/**
 * Created by mrz on 2017/8/26.
 */
/**
 *
 * @param url              string
 * @param param            {}
 * @param type             get/post 默认GET
 * @param dataType         "json"/ "html" / or other
 * @param contentType      "application/json;charset=UTF-8" / "application/x-www-form-urlencoded; charset=UTF-8" / text/html;charset=UTF-8
 * @returns {*}
 */
function ajax(url, param, type, dataType, contentType) {
    // 利用了jquery延迟对象回调的方式对ajax封装，使用done()，fail()，always()等方法进行链式回调操作
    // 如果需要的参数更多，比如有跨域dataType需要设置为'jsonp'等等，也可以不做这一层封装，还是根据工程实际情况判断吧，重要的还是链式回调
    return $.ajax({
        url: url,
        data: param || {},
        type: type || 'GET',
        dataType: dataType || "html",
        contentType: contentType || "text/html;charset=UTF-8"
    });
}
/**
 * AJAX的封装
 * @param url       string
 * @param param     "" / {}
 * @param type      get/post
 * @returns {*}
 */
function handleAjax(url, param, type, dataType, contentType) {
    return ajax(url, param, type, dataType, contentType).then(function(resp){
        // 成功回调
        if(resp.result){
            return resp.data; // 直接返回要处理的数据，作为默认参数传入之后done()方法的回调
        }
        else{
            return $.Deferred().reject(resp.msg); // 返回一个失败状态的deferred对象，把错误代码作为默认参数传入之后fail()方法的回调
        }
    }, function(err){
        // 失败回调
        console.log(err.status); // 打印状态码
    });
}




/**
 * url               发送请求的地址
 * data              发送请求的参数
 * callBack          请求的回调函数
 * isHideLoading     Boolean，是否显示loading动画，此参数可传入也可不传入，当不传入时，isHideLoading会被后续传入的参数覆盖（很可能会被赋值成一个函数），此时可以当他是在给 callBack 赋值， 而忽略 isHideLoading，也就不会显示loading动画
 * dataType          返回JSON数据
 */
function HrPost(url, data, isHideLoading, callBack, dataType) {
    var dataType;
    //如果没有显示loading动画，则此时isHideLoading会被赋值成一个函数，而如果第四个参数也没有传，第四个参数就是undefined
    if (!$.isFunction(callBack)) {
        if (callBack == undefined) {
            dataType = "json";
        } else {
            dataType = callBack;
        }
    } else {
        dataType = dataType || "json";
    }

    if (isHideLoading) {
        if ($.isFunction(isHideLoading)) {
            callBack = isHideLoading;
            isHideLoading = false;
        }
    }

    //可以根据自己的实际需求来定制是否显示loading动画
    if (isHideLoading) {
        var loading = '<div class="ajaxLoading"><div class="loader">加载中...</div></div>';
        $("body").append(loading);
        $(".ajaxLoading").show();
        isHideLoading = false;
    }

    $.post(url, data, function (res) {
        if (!isHideLoading) {
            $(".ajaxLoading").hide();
        }

        if (res != null && res != "") {
            if (callBack) {
                if ($.isFunction(callBack)) {
                    callBack(res);
                } else {
                    console.log("callBack is not a function");
                }
            }
        }
    }, dataType);
}